﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
using System.Threading;

namespace Gerenciador
{
    public partial class Forma : Form
    {
        Desenho Draw = new Desenho();   /*Classe de efeitos gráficos*/
        public Load Carregar = new Load();
        bool pp = false;

        Thread Metodo;

        public bool FalhaDeConexao = false;   /*Assume true apenas quando o software não consegue se conectar ao banco de dados*/
        
        public Forma()
        {
            InitializeComponent();

        }


        private void Form_Load(object sender, EventArgs e)
        {
           CheckForIllegalCrossThreadCalls = false;

           TelaLoading();

           SQLConnect Conexao = new SQLConnect();   /*Objeto que representa uma conexão com o banco de dados*/
           ConectarAoBanco(Conexao);   /*Conectando-se ao banco de dados*/
            //Carregar.Piscar();
            //Carregar.ShowDialog();


            /*Verificando se já existe um usuário cadastrado no software*/
            //if (Conexao.SelectFull("Pasta").GetLength(1) != 1)
            //    Console.WriteLine("Funfa");   /*Insterir Tela de cadastro do usuario*/

           while (Carregar.L.Quant_Pisca < 4);
           Carregar.L.PararPiscaPisca();


           //Arquivo (ID_Arq, Nome, Extencao, Tamanho, Caminho) values (1, 'Carro', 'Dia', '59mb', 'C:\GDA')           



           //String[] Parto;
           //Parto = new String[5];
           //Parto[0] = "ID_Arq";
           //Parto[1] = "Nome";
           //Parto[2] = "Extencao";
           //Parto[3] = "Tamanho";
           //Parto[4] = "Caminho";

           //String[] Var;
           //Var = new String[5];
           //Var[0] = "2";
           //Var[1] = "Carro";
           //Var[2] = "Dia";
           //Var[3] = "59mb";
           //Var[4] = "C:\\GDA";

           //Console.WriteLine(Conexao.IserirRegistro("Arquivo", Parto, Var));

           // Arquivos X = new Arquivos();
           // List<String> Pilha = X.Mapear("C:\\Users\\Diego\\Documents\\CDs");

            

            //for (int i = 0; i < Pilha.Count; i++)
            //    Console.WriteLine(Pilha[i]);

            
        /*Quando a execução chegar a este ponto todos os testes de conectividade já terão sido feitos*/
        /**-------**/















            Draw.Maximizar(this);

            /*Este bloco se resume em organizar as coisas na tela em função do tamanho do monitor*/
        /*---------*/

            Draw.Centralizar(DESKTOP, this);
            Draw.Centralizar(ENTRAR, this);
            Draw.Centralizar(EDITAR, this);
            Draw.Centralizar(L_ENTRAR, this);
            Draw.Centralizar(L_EDITAR, this);
            Draw.Centralizar(SAIR, this);
            Draw.Centralizar(L_SAIR, this);
        
            Draw.DeslocarControle(ENTRAR, -55, 0);
            Draw.DeslocarControle(EDITAR, 55, 0);
            Draw.DeslocarControle(L_ENTRAR, -52, 60);
            Draw.DeslocarControle(L_EDITAR, 58, 60);
            Draw.DeslocarControle(SAIR, Screen.PrimaryScreen.Bounds.Width / 2 - 150, Screen.PrimaryScreen.Bounds.Height / 2 - 50);
            Draw.DeslocarControle(L_SAIR, Screen.PrimaryScreen.Bounds.Width / 2 - 100, Screen.PrimaryScreen.Bounds.Height / 2 - 50);


            /*Iniciando forma em fade*/


            

            this.Activate();
            Draw.IniciarEmFade(this, 40);
            Carregar.Close();
            

        /*---------*/

        }


        public void TelaLoading()
        {

            Thread Metodo = new Thread(new ThreadStart(TheadLoad));
            AsyncOperationManager.CreateOperation(Metodo);
            Metodo.Start();
            
        }

        public void MatarProcesso()
        {
            Process[] processes = Process.GetProcessesByName("Gerenciador.exe");
            Process[] Processes2 = Process.GetProcessesByName("Gerenciador.vshost.exe");

            foreach (Process process in processes)
            {
                process.Kill();

            }

            foreach (Process process2 in processes)
            {
                process2.Kill();

            }

        }


        public void Conectiones()
        {
            SQLConnect Conexao = new SQLConnect();   /*Objeto que representa uma conexão com o banco de dados*/
            ConectarAoBanco(Conexao);   /*Conectando-se ao banco de dados*/

        }

        private void TheadLoad()
        {

            Carregar.VincularForm(this);
            Carregar.Piscar();
            Carregar.Activate();
            Carregar.ShowDialog();
            
        }

        private void ENTRAR_Click(object sender, EventArgs e)
        {
            

            /*Exibindo mensagem inicial de senha para o usuário*/
            Senha FormSenha = new Senha();
            FormSenha.VincularForm(this, "Usuario", 10, 1);
            FormSenha.ShowDialog();

                       

        }


        private void EDITAR_Click(object sender, EventArgs e)
        {
            /*Exibindo mensagem inicial de senha para o usuário*/
            Senha FormSenhas = new Senha();
            FormSenhas.ShowDialog();
            
            ENTRAR.Visible = false;
            L_ENTRAR.Visible = false;
            EDITAR.Visible = false;
            L_EDITAR.Visible = false;
            SAIR.Visible = false;
            L_SAIR.Visible = false;

            DESKTOP.Visible = true;

        }


        private void SAIR_Click(object sender, EventArgs e)
        {
            this.Close();

        }


        public void ConectarAoBanco(SQLConnect Conexao)
        {
            /*Este bloco verifica a conectividade com o SQL Server*/
        /*---------*/


            /*Caso a conexão falhe informamos ao usuário que será preciso fazer a configuração do banco de dados corretamente 
             * neste software*/
            if (Conexao.Conectar("VANESSA-PC\\Sqlexpress", "Gerenciador", true, "sa", "123") == false)
            {
                while (Carregar.L.Quant_Pisca < 4);

                if (CaixaDeEscolha("O software encontrou um erro ao tentar se conectar\n        ao banco de dados.\n\n        Para corrigir será preciso configurar" +
                    " e fazer um teste \n        de conexão utilizando uma ferramenta auxiliar.\n\n        Deseja efetuar esse procedimento agora?") == true)
                    Console.WriteLine("Executa o programa de configuração");
                else   /*Interrompemos a execução caso o usuário não queira fazer as devidas alterações*/
                {
                    MessageBox.Show("Finalizando o gerenciador de arquivos!");
                    FalhaDeConexao = true;   /*Isso assegura que o software seja encerrado sem fazer nenhuma pergunta ao usuário*/
                    this.Close();

                }

            }

        /*---------*/

        }


        public bool CaixaDeEscolha(String Aviso)
        {
            DialogResult Resposta = MessageBox.Show("        " + Aviso,
                   "Aviso!", MessageBoxButtons.YesNo);

            if (Resposta == System.Windows.Forms.DialogResult.No)   /*Não quero fazer*/
            {
                return (false);

            }
            else   /*Quero fazer*/
            {
                return (true);

            }
       
        }


        private void Forma_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (FalhaDeConexao == false)   /*Determina se o software está sendo fechado por um usuário ou pelo próprio software*/
            {
                /*Cancela o fechamento caso o usuário clique em não*/
                if (CaixaDeEscolha("Tem certeza que você quer sair deste programa?") == false)
                    e.Cancel = true;   /*Mantem o programa em execução*/

            }
            
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Icones FormIcones = new Icones();
            FormIcones.ShowDialog();

        }

    }

}
